<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>模板生成 - DocuGen</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="{{ url_for('static', path='/css/style.css') }}">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsoneditor@9.9.0/dist/jsoneditor.min.css">
</head>
<body class="bg-light">
    <nav class="navbar navbar-expand-lg navbar-dark bg-primary">
        <div class="container">
            <a class="navbar-brand" href="/">
                <i class="bi bi-file-earmark-text me-2"></i>DocuGen
            </a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav ms-auto">
                    <li class="nav-item">
                        <a class="nav-link" href="/"><i class="bi bi-house me-1"></i>首页</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="/document-generator"><i class="bi bi-file-earmark-text me-1"></i>文档生成</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link active" href="/template-generator"><i class="bi bi-file-earmark-richtext me-1"></i>模板生成</a>
                    </li>
                    <li class="nav-item dropdown">
                        <a class="nav-link dropdown-toggle" href="#" id="modelDropdown" role="button" data-bs-toggle="dropdown">
                            <i class="bi bi-gear me-1"></i>模型设置
                        </a>
                        <ul class="dropdown-menu" aria-labelledby="modelDropdown">
                            <li><a class="dropdown-item model-switch" data-model="local" href="#"><i class="bi bi-cpu me-1"></i>本地模型</a></li>
                            <li><a class="dropdown-item model-switch" data-model="third_party" href="#"><i class="bi bi-cloud me-1"></i>第三方模型</a></li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>
    </nav>

    <div class="container py-4">
        <h1 class="mb-4 text-primary"><i class="bi bi-file-earmark-richtext me-2"></i>文档模板生成</h1>
        
        <div class="row">
            <div class="col-lg-12 mb-4">
                <div class="card shadow-sm">
                    <div class="card-header bg-primary text-white">
                        <ul class="nav nav-tabs card-header-tabs" id="templateTabs" role="tablist">
                            <li class="nav-item" role="presentation">
                                <button class="nav-link active text-white" id="create-tab" data-bs-toggle="tab" data-bs-target="#create" type="button" role="tab">创建模板</button>
                            </li>
                            <li class="nav-item" role="presentation">
                                <button class="nav-link text-white" id="use-tab" data-bs-toggle="tab" data-bs-target="#use" type="button" role="tab">使用模板</button>
                            </li>
                        </ul>
                    </div>
                    <div class="card-body">
                        <div class="tab-content" id="templateTabsContent">
                            <!-- 创建模板选项卡 -->
                            <div class="tab-pane fade show active" id="create" role="tabpanel">
                                <div class="row">
                                    <div class="col-md-6">
                                        <div class="mb-4">
                                            <h5 class="card-title mb-3">上传模板</h5>
                                            <form id="uploadTemplateForm" enctype="multipart/form-data">
                                                <div class="mb-3">
                                                    <label for="templateName" class="form-label">模板名称</label>
                                                    <input type="text" class="form-control" id="templateName" placeholder="输入模板名称，如'项目报告'">
                                                </div>
                                                <div class="mb-3">
                                                    <label for="templateFile" class="form-label">选择模板文件</label>
                                                    <input class="form-control" type="file" id="templateFile" accept=".docx">
                                                    <div class="form-text">请上传Word文档(.docx)格式的模板文件</div>
                                                </div>
                                                <div class="mb-3">
                                                    <label for="templateDescription" class="form-label">模板描述(可选)</label>
                                                    <textarea class="form-control" id="templateDescription" rows="3" placeholder="添加对此模板的简要描述，帮助后续使用"></textarea>
                                                </div>
                                                <div class="d-grid">
                                                    <button type="submit" class="btn btn-primary" id="uploadTemplateBtn">
                                                        <span class="spinner-border spinner-border-sm d-none" id="templateSpinner"></span>
                                                        <i class="bi bi-upload me-2"></i>上传模板
                                                    </button>
                                                </div>
                                            </form>
                                        </div>
                                        <div class="mb-4">
                                            <h5 class="card-title mb-3">模板格式说明</h5>
                                            <div class="card bg-light">
                                                <div class="card-body">
                                                    <p class="mb-2"><i class="bi bi-info-circle-fill text-primary me-2"></i><strong>如何制作模板文件？</strong></p>
                                                    <p>在Word中创建模板文件时，使用双大括号标记变量：</p>
                                                    <ul>
                                                        <li>例如：<code>{{标题}}</code>、<code>{{作者}}</code>、<code>{{日期}}</code></li>
                                                        <li>这些变量将在生成文档时被替换为实际内容</li>
                                                        <li>变量名可以是中文或英文</li>
                                                        <li>可以在正文、标题或表格中使用变量</li>
                                                    </ul>
                                                    <p class="mb-0">上传后，系统会自动识别模板中的变量，供后续文档生成使用。</p>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="col-md-6">
                                        <h5 class="card-title mb-3">可用模板列表</h5>
                                        <div class="card">
                                            <div class="card-body">
                                                <div class="table-responsive">
                                                    <table class="table table-hover">
                                                        <thead>
                                                            <tr>
                                                                <th>模板名称</th>
                                                                <th class="text-end">操作</th>
                                                            </tr>
                                                        </thead>
                                                        <tbody id="templatesList">
                                                            {% for template in templates %}
                                                            <tr>
                                                                <td>{{ template }}</td>
                                                                <td class="text-end">
                                                                    <button class="btn btn-sm btn-outline-primary use-template-btn" data-template="{{ template }}">
                                                                        <i class="bi bi-file-earmark-text me-1"></i>使用
                                                                    </button>
                                                                </td>
                                                            </tr>
                                                            {% else %}
                                                            <tr>
                                                                <td colspan="2" class="text-center">暂无可用模板</td>
                                                            </tr>
                                                            {% endfor %}
                                                        </tbody>
                                                    </table>
                                                </div>
                                                <div class="mt-3">
                                                    <button class="btn btn-outline-secondary btn-sm" id="refreshTemplatesBtn">
                                                        <i class="bi bi-arrow-clockwise me-1"></i>刷新列表
                                                    </button>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="mt-4">
                                            <h5 class="card-title mb-3">创建结果</h5>
                                            <div class="card">
                                                <div class="card-body">
                                                    <div id="templateResult" class="d-none">
                                                        <div class="alert alert-success">
                                                            <h5><i class="bi bi-check-circle-fill me-2"></i>模板创建成功！</h5>
                                                            <p class="mb-2">模板名称: <span id="resultTemplateName"></span></p>
                                                            <p class="mb-3">您现在可以在"使用模板"标签页中使用此模板。</p>
                                                            <div class="d-grid gap-2">
                                                                <button class="btn btn-primary" id="downloadTemplateBtn">
                                                                    <i class="bi bi-download me-2"></i>下载模板文件
                                                                </button>
                                                                <button class="btn btn-outline-primary" id="switchToUseTabBtn">
                                                                    <i class="bi bi-arrow-right me-2"></i>立即使用此模板
                                                                </button>
                                                            </div>
                                                        </div>
                                                    </div>
                                                    <div id="noTemplateResult">
                                                        <p class="text-muted text-center py-3">
                                                            <i class="bi bi-info-circle me-1"></i>模板创建结果将显示在这里
                                                        </p>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            
                            <!-- 使用模板选项卡 -->
                            <div class="tab-pane fade" id="use" role="tabpanel">
                                <div class="row">
                                    <div class="col-md-6">
                                        <div class="mb-4">
                                            <h5 class="card-title mb-3">选择模板</h5>
                                            <div class="mb-3">
                                                <label for="selectTemplate" class="form-label">可用模板</label>
                                                <select class="form-select" id="selectTemplate">
                                                    <option value="">-- 请选择模板 --</option>
                                                    {% for template in templates %}
                                                    <option value="{{ template }}">{{ template }}</option>
                                                    {% endfor %}
                                                </select>
                                            </div>
                                        </div>
                                        <div class="mb-4">
                                            <h5 class="card-title mb-3">填充模板数据</h5>
                                            <div id="templateVariablesContainer">
                                                <div class="alert alert-info">
                                                    <i class="bi bi-info-circle me-2"></i>请先选择一个模板
                                                </div>
                                            </div>
                                            <div class="d-grid mt-4">
                                                <button class="btn btn-primary" id="generateFromTemplateBtn" disabled>
                                                    <span class="spinner-border spinner-border-sm d-none" id="useTemplateSpinner"></span>
                                                    <i class="bi bi-file-earmark-richtext me-2"></i>生成文档
                                                </button>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="col-md-6">
                                        <div class="mb-4">
                                            <h5 class="card-title mb-3">使用说明</h5>
                                            <div class="card bg-light">
                                                <div class="card-body">
                                                    <p><i class="bi bi-info-circle-fill text-primary me-2"></i><strong>如何使用模板？</strong></p>
                                                    <ol>
                                                        <li>从左侧下拉菜单中选择一个模板</li>
                                                        <li>填写表单中的所有必填变量</li>
                                                        <li>点击"生成文档"按钮</li>
                                                        <li>生成的文档将自动下载</li>
                                                    </ol>
                                                    <p class="mb-0 mt-3">
                                                        <i class="bi bi-lightbulb-fill text-warning me-2"></i>
                                                        <strong>提示：</strong>可以在"上传模板"选项卡中查看和管理所有可用模板
                                                    </p>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="mt-4">
                                            <h5 class="card-title mb-3">生成结果</h5>
                                            <div class="card">
                                                <div class="card-body">
                                                    <div id="useTemplateResult" class="d-none">
                                                        <div class="alert alert-success">
                                                            <h5><i class="bi bi-check-circle-fill me-2"></i>文档生成成功！</h5>
                                                            <p class="mb-3">您的文档已经生成完毕，可以点击下方按钮下载。</p>
                                                            <div class="d-grid">
                                                                <button class="btn btn-primary" id="downloadGeneratedDocBtn">
                                                                    <i class="bi bi-download me-2"></i>下载生成的文档
                                                                </button>
                                                            </div>
                                                        </div>
                                                    </div>
                                                    <div id="noUseTemplateResult">
                                                        <p class="text-muted text-center py-3">
                                                            <i class="bi bi-info-circle me-1"></i>文档生成结果将显示在这里
                                                        </p>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <footer class="bg-dark text-white py-4 mt-5">
        <div class="container">
            <div class="row">
                <div class="col-md-6">
                    <h5><i class="bi bi-file-earmark-text me-2"></i>DocuGen</h5>
                    <p>AI驱动的文档生成系统，让创作更高效。</p>
                </div>
                <div class="col-md-6 text-md-end">
                    <p class="mb-0">&copy; 2023 DocuGen. 保留所有权利。</p>
                </div>
            </div>
        </div>
    </footer>

    <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/jsoneditor@9.9.0/dist/jsoneditor.min.js"></script>
    <script>
        $(document).ready(function() {
            // 初始化JSON编辑器
            const container = document.getElementById('jsonEditor');
            const options = {
                mode: 'tree',
                modes: ['tree', 'view', 'form', 'code', 'text'],
                onChangeJSON: function(json) {
                    // 检查是否有内容，以启用/禁用生成按钮
                    const hasContent = Object.keys(json || {}).length > 0;
                    const hasTemplate = $('#selectTemplate').val() !== '';
                    $('#generateFromTemplateBtn').prop('disabled', !(hasContent && hasTemplate));
                }
            };
            const jsonEditor = new JSONEditor(container, options, {});
            
            // 当前模型类型
            let currentModel = 'third_party';
            
            // 当前生成的模板路径
            let currentTemplatePath = '';
            let currentGeneratedDocPath = '';
            
            // 上传模板
            $('#uploadTemplateForm').on('submit', function(e) {
                e.preventDefault();
                
                const templateName = $('#templateName').val().trim();
                const templateFile = $('#templateFile')[0].files[0];
                const templateDescription = $('#templateDescription').val().trim();
                
                if (!templateName) {
                    alert('请输入模板名称');
                    return;
                }
                
                if (!templateFile) {
                    alert('请选择模板文件');
                    return;
                }
                
                // 检查文件类型
                if (!templateFile.name.endsWith('.docx')) {
                    alert('请上传Word文档(.docx)格式的模板文件');
                    return;
                }
                
                // 显示加载动画
                $('#templateSpinner').removeClass('d-none');
                $('#uploadTemplateBtn').prop('disabled', true);
                
                // 创建FormData对象用于文件上传
                const formData = new FormData();
                formData.append('template_name', templateName);
                formData.append('template_file', templateFile);
                formData.append('description', templateDescription);
                
                // 发送请求上传模板
                $.ajax({
                    url: '/api/upload-template',
                    type: 'POST',
                    data: formData,
                    processData: false,  // 告诉jQuery不要处理数据
                    contentType: false,  // 告诉jQuery不要设置contentType
                    success: function(response) {
                        if (response.file_path) {
                            // 更新UI显示结果
                            $('#noTemplateResult').addClass('d-none');
                            $('#templateResult').removeClass('d-none');
                            $('#resultTemplateName').text(templateName);
                            
                            // 保存路径用于下载
                            currentTemplatePath = response.file_path;
                            
                            // 刷新模板列表
                            refreshTemplatesList();
                        } else {
                            alert('上传模板失败: ' + (response.error || '未知错误'));
                        }
                    },
                    error: function(xhr) {
                        alert('请求失败: ' + xhr.responseText);
                    },
                    complete: function() {
                        $('#templateSpinner').addClass('d-none');
                        $('#uploadTemplateBtn').prop('disabled', false);
                    }
                });
            });
            
            // 刷新模板列表
            function refreshTemplatesList() {
                $.ajax({
                    url: '/api/templates',
                    type: 'GET',
                    success: function(response) {
                        if (response.templates && response.templates.length > 0) {
                            // 更新表格
                            let html = '';
                            response.templates.forEach(function(template) {
                                html += `
                                <tr>
                                    <td>${template}</td>
                                    <td class="text-end">
                                        <button class="btn btn-sm btn-outline-primary use-template-btn" data-template="${template}">
                                            <i class="bi bi-file-earmark-text me-1"></i>使用
                                        </button>
                                    </td>
                                </tr>`;
                            });
                            $('#templatesList').html(html);
                            
                            // 更新下拉菜单
                            let selectHtml = '<option value="">-- 请选择模板 --</option>';
                            response.templates.forEach(function(template) {
                                selectHtml += `<option value="${template}">${template}</option>`;
                            });
                            $('#selectTemplate').html(selectHtml);
                        } else {
                            $('#templatesList').html('<tr><td colspan="2" class="text-center">暂无可用模板</td></tr>');
                            $('#selectTemplate').html('<option value="">-- 请选择模板 --</option>');
                        }
                    },
                    error: function(xhr) {
                        alert('获取模板列表失败: ' + xhr.responseText);
                    }
                });
            }
            
            // 点击刷新按钮
            $('#refreshTemplatesBtn').on('click', function() {
                refreshTemplatesList();
            });
            
            // 点击下载模板按钮
            $('#downloadTemplateBtn').on('click', function() {
                if (currentTemplatePath) {
                    const filename = currentTemplatePath.split('/').pop();
                    window.location.href = '/download/' + filename;
                } else {
                    alert('找不到模板文件');
                }
            });
            
            // 切换到使用模板选项卡
            $('#switchToUseTabBtn').on('click', function() {
                $('#use-tab').tab('show');
            });
            
            // 从列表中选择模板
            $(document).on('click', '.use-template-btn', function() {
                const template = $(this).data('template');
                $('#selectTemplate').val(template);
                $('#use-tab').tab('show');
                
                // 检查是否可以启用生成按钮
                const hasContent = Object.keys(jsonEditor.get() || {}).length > 0;
                $('#generateFromTemplateBtn').prop('disabled', !hasContent);
            });
            
            // 选择模板下拉菜单变化
            $('#selectTemplate').on('change', function() {
                const templateName = $(this).val();
                
                if (!templateName) {
                    // 未选择模板时显示提示信息
                    $('#templateVariablesContainer').html(
                        '<div class="alert alert-info"><i class="bi bi-info-circle me-2"></i>请先选择一个模板</div>'
                    );
                    $('#generateFromTemplateBtn').prop('disabled', true);
                    return;
                }
                
                // 显示加载中
                $('#templateVariablesContainer').html(
                    '<div class="text-center py-3"><span class="spinner-border spinner-border-sm me-2"></span>正在加载模板变量...</div>'
                );
                
                // 获取模板变量
                $.ajax({
                    url: '/api/get-template-variables',
                    type: 'GET',
                    data: {
                        template_name: templateName
                    },
                    success: function(response) {
                        if (response.variables && response.variables.length > 0) {
                            // 构建变量输入表单
                            let html = '<form id="templateVariablesForm">';
                            
                            response.variables.forEach(function(variable, index) {
                                html += `
                                <div class="mb-3">
                                    <label for="var_${index}" class="form-label">${variable.description || variable.name}</label>
                                    <input type="text" class="form-control template-variable-input" 
                                           id="var_${index}" name="${variable.name}" 
                                           placeholder="请输入${variable.name}的值" 
                                           value="${variable.default_value || ''}" required>
                                </div>`;
                            });
                            
                            html += '</form>';
                            $('#templateVariablesContainer').html(html);
                            
                            // 绑定输入变化事件
                            $('.template-variable-input').on('input', function() {
                                const allFilled = areAllVariablesFilled();
                                $('#generateFromTemplateBtn').prop('disabled', !allFilled);
                            });
                        } else {
                            // 没有变量时显示提示
                            $('#templateVariablesContainer').html(
                                '<div class="alert alert-warning"><i class="bi bi-exclamation-triangle me-2"></i>此模板没有定义变量</div>'
                            );
                            $('#generateFromTemplateBtn').prop('disabled', false);
                        }
                    },
                    error: function(xhr) {
                        $('#templateVariablesContainer').html(
                            `<div class="alert alert-danger"><i class="bi bi-x-circle me-2"></i>获取模板变量失败: ${xhr.responseText}</div>`
                        );
                        $('#generateFromTemplateBtn').prop('disabled', true);
                    }
                });
            });
            
            // 检查是否所有必填变量都已填写
            function areAllVariablesFilled() {
                let allFilled = true;
                $('.template-variable-input[required]').each(function() {
                    if (!$(this).val().trim()) {
                        allFilled = false;
                        return false; // 中断循环
                    }
                });
                return allFilled;
            }
            
            // 生成文档按钮
            $('#generateFromTemplateBtn').on('click', function() {
                const templateName = $('#selectTemplate').val();
                
                if (!templateName) {
                    alert('请选择模板');
                    return;
                }
                
                // 收集所有变量值
                const variableData = {};
                $('#templateVariablesForm').find('input').each(function() {
                    const name = $(this).attr('name');
                    const value = $(this).val().trim();
                    variableData[name] = value;
                });
                
                // 显示加载动画
                $('#useTemplateSpinner').removeClass('d-none');
                $('#generateFromTemplateBtn').prop('disabled', true);
                
                // 发送请求生成文档
                $.ajax({
                    url: '/api/generate-from-template',
                    type: 'POST',
                    data: {
                        template_name: templateName,
                        data: JSON.stringify(variableData)
                    },
                    success: function(response) {
                        if (response.file_path) {
                            // 更新UI显示结果
                            $('#noUseTemplateResult').addClass('d-none');
                            $('#useTemplateResult').removeClass('d-none');
                            
                            // 保存路径用于下载
                            currentGeneratedDocPath = response.file_path;
                        } else {
                            alert('生成文档失败: ' + (response.error || '未知错误'));
                        }
                    },
                    error: function(xhr) {
                        alert('请求失败: ' + xhr.responseText);
                    },
                    complete: function() {
                        $('#useTemplateSpinner').addClass('d-none');
                        $('#generateFromTemplateBtn').prop('disabled', false);
                    }
                });
            });
            
            // 下载生成的文档
            $('#downloadGeneratedDocBtn').on('click', function() {
                if (currentGeneratedDocPath) {
                    const filename = currentGeneratedDocPath.split('/').pop();
                    window.location.href = '/download/' + filename;
                } else {
                    alert('找不到生成的文档');
                }
            });
            
            // 模型切换功能
            $('.model-switch').on('click', function(e) {
                e.preventDefault();
                
                const modelType = $(this).data('model');
                
                if (modelType === currentModel) {
                    return; // 已经是当前模型，不需要切换
                }
                
                // 发送切换请求
                $.ajax({
                    url: '/api/switch-model',
                    type: 'POST',
                    data: {
                        model_type: modelType
                    },
                    success: function(response) {
                        if (response.success) {
                            currentModel = modelType;
                            
                            // 显示切换成功消息
                            const modelName = modelType === 'local' ? '本地模型' : '第三方模型';
                            alert(`已切换到${modelName}`);
                        } else {
                            alert('模型切换失败: ' + (response.error || '未知错误'));
                        }
                    },
                    error: function(xhr) {
                        alert('模型切换请求失败: ' + xhr.responseText);
                    }
                });
            });
        });
    </script>
</body>
</html> 